/*
* Copyright (C) 2016 Google Inc. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.google.android.apps.santatracker.doodles.tilt;
import android.content.Context;
import android.content.res.Resources;
import android.graphics.Canvas;
import com.google.android.apps.santatracker.doodles.shared.Actor;
import com.google.android.apps.santatracker.doodles.shared.Vector2D;
import com.google.android.apps.santatracker.doodles.shared.physics.Polygon;
import java.util.ArrayList;
import java.util.List;
import org.json.JSONException;
import org.json.JSONObject;
/**
* An emitter of watermelons which can run over the golf ball.
*/
public class WatermelonEmitter extends CollisionActor {
public static final String TYPE = "Watermelon emitter";
public static final int NUM_WATERMELONS = 3;
public static final float WATERMELON_VELOCITY = 750.0f;
public static final long LIFETIME_MS = 7500;
private List<WatermelonActor> watermelons = new ArrayList<>();
private long elapsedMs;
public WatermelonEmitter(Polygon collisionBody, Resources resources) {
super(collisionBody);
this.zIndex = 1;
collisionBody.setPaintColors(0xffff6385, 0xff6cfc9b, 0x6400ff00);
for (int i = 0; i < NUM_WATERMELONS; i++) {
WatermelonActor watermelon = WatermelonActor.create(collisionBody.min, resources);
watermelon.setVelocity(Vector2D.get(0, WATERMELON_VELOCITY));
watermelon.delayMs = (i + 1) * LIFETIME_MS / NUM_WATERMELONS;
watermelons.add(watermelon);
}
}
@Override
public void update(float deltaMs) {
elapsedMs += deltaMs;
for (int i = 0; i < watermelons.size(); i++) {
WatermelonActor watermelon = watermelons.get(i);
if (elapsedMs > watermelon.delayMs) {
watermelon.update(deltaMs);
if (watermelon.ageMs > LIFETIME_MS) {
reset(watermelon);
}
}
}
}
@Override
public void draw(Canvas canvas) {
super.draw(canvas);
for (int i = 0; i < watermelons.size(); i++) {
WatermelonActor watermelon = watermelons.get(i);
watermelon.draw(canvas);
}
}
@Override
public boolean resolveCollision(Actor other, float deltaMs) {
for (int i = 0; i < watermelons.size(); i++) {
WatermelonActor watermelon = watermelons.get(i);
if (watermelon.resolveCollision(other, deltaMs)) {
return true;
}
}
return false;
}
@Override
public String getType() {
return WatermelonEmitter.TYPE;
}
private void reset(WatermelonActor actor) {
actor.setPosition(collisionBody.min);
actor.ageMs = 0;
}
public static WatermelonEmitter fromJSON(JSONObject json, Context context) throws JSONException {
return new WatermelonEmitter(
Polygon.fromJSON(json.getJSONArray(POLYGON_KEY)), context.getResources());
}
}