Newer
Older
Cactus-CleanArchitecture / app / src / main / java / org / ntlab / radishforandroidstudio / cactusClient / models / OwnBullets.java
package org.ntlab.radishforandroidstudio.cactusClient.models;

import android.content.res.Resources;

import org.ntlab.radishforandroidstudio.framework.event.BulletShotEvent;
import org.ntlab.radishforandroidstudio.framework.gameMain.GameBaseModel;
import org.ntlab.radishforandroidstudio.framework.listener.BulletShotListener;
import org.ntlab.radishforandroidstudio.framework.model3D.Position3D;
import org.ntlab.radishforandroidstudio.framework.model3D.Quaternion3D;
import org.ntlab.radishforandroidstudio.framework.model3D.Universe;
import org.ntlab.radishforandroidstudio.framework.subject.BulletShotSubject;

import java.util.ArrayList;
import java.util.Iterator;

public class OwnBullets implements GameBaseModel, BulletShotListener {
    private ArrayList<MyBullet> bullets = new ArrayList<>();
    private String playerId;
    private String instanceId;
    private Resources resources;
    private Universe universe;
    private CactusModels cactusModels;
    private Position3D playerPos;
    private Quaternion3D playerAngle;

    public OwnBullets(Resources resources, Universe universe, String instanceId, String playerId) {
        this.resources = resources;
        this.universe = universe;
        cactusModels = CactusModels.getInstance();

        setInstanceId(instanceId);
        setPlayerId(playerId);

        BulletShotSubject.getInstance().addListener(this);
    }

    public void setPosition(Position3D pos) {
        playerPos = pos;
    }

    public void setAngle(Quaternion3D angle) {
        playerAngle = angle;
    }

    public void sendDeleteBulletForServer(MyBullet myBullet) {
        // TODO: 弾消し情報を送信
    }

    @Override
    public void update(double interval) {
        for (Iterator<MyBullet> bulletIterator = bullets.iterator(); bulletIterator.hasNext();) {
            MyBullet bullet = bulletIterator.next();
            // 弾削除
            if (bullet.isDelete()) {
                sendDeleteBulletForServer(bullet);
                bulletIterator.remove();
            }
        }
    }

    public void deleteBullets(ArrayList<String> deletedBullets) {
        for (Iterator<MyBullet> bulletIterator = bullets.iterator(); bulletIterator.hasNext();) {
            MyBullet bullet = bulletIterator.next();

            for(String deleteBullet : deletedBullets) { // 弾削除
                if (bullet.getUuid().equals(bullets)) {
                    universe.displace(bullet);
                    sendDeleteBulletForServer(bullet);
                    bulletIterator.remove();
                    break;
                }
            }
        }
    }

    @Override
    public void setInstanceId(String id) {
        instanceId = id;
    }

    public void setPlayerId(String id) {
        playerId = id;
    }

    /**
     * 弾作成のイベント受け
     *
     * @param event イベントの情報
     * @return
     */
    @Override
    public boolean onEvent(BulletShotEvent event) {
        if (playerPos == null || playerAngle == null || playerId == null || instanceId == null) {
            return false;
        }
        MyBullet b = event.getBullet();
        b.setPlayerid(playerId);
        b.setInstanceId(instanceId);
        b.init(playerPos, playerAngle);
        bullets.add(b);
        universe.place(b);
        cactusModels.addModel(b);
        return true;
    }
}