void SimulateCollision(List <Unit> targets) { List <bool> clean = new List <bool>(); List <CollisionInfo> infos = new List <CollisionInfo>(); //Simulate Collision:manipulate only veloity and position PhysicsSimulator.SimulateCollision(targets, mapBehaviour, this, clean, infos); for (int i = 0; i < targets.Count; i++) { if (clean[i]) { PhysicsSimulator.ApplyIntegral(targets[i]); } else { PhysicsSimulator.SimulateIntegral(targets[i], Time.deltaTime, mapBehaviour); PhysicsSimulator.ApplyIntegral(targets[i]); } } for (int i = 0; i < infos.Count; i++) { CollisionInfo collision = infos[i]; // Stop healing buff infos[i].me.buff &= ~BuffFlag.BUFF_HEALING; infos[i].other.buff &= ~BuffFlag.BUFF_HEALING; UnitInfoTag unitInfoTag = FindInstance(collision.me.uuid); if (unitInfoTag != null) { unitInfoTag.CollisionEvent(collision); } } List <Unit> remains = new List <Unit>(); for (int i = 0; i < targets.Count; i++) { Unit curUnit = targets[i]; //死亡判定 if (isClient == 0 && !curUnit.isDead) { if (curUnit.HP <= 0) { curUnit.isDead = true; } else if (isOutOfBounds(curUnit)) //ユニットが範囲外に出たときの死亡判定 { curUnit.isDead = true; } } if (!curUnit.isDead) { remains.Add(curUnit); } } units = remains; checkGameSet(); }
public List <Vector3> GetTrails(Vector3 position, Vector3 velocity) { List <Vector3> trails = new List <Vector3>(); float dt = 1 / 30f; Unit unit = new Unit(); unit.x = position.x; unit.z = position.z; unit.x1 = position.x; unit.z1 = position.z; unit.vx = velocity.x; unit.vz = velocity.z; unit.vx1 = velocity.x; unit.vz1 = velocity.z; for (float t = 0; t < 10f; t += dt) { unit.vx1 = unit.vx; unit.vz1 = unit.vz; PhysicsSimulator.SimulateIntegral(unit, dt, MapBehaviour.instance); if (!PhysicsSimulator.CollideMap(unit, MapBehaviour.instance)) { // Debug.Log("collided"); unit.vx = unit.vx1; unit.vz = unit.vz1; PhysicsSimulator.SimulateIntegral(unit, dt, MapBehaviour.instance); } PhysicsSimulator.ApplyIntegral(unit); trails.Add(new Vector3(unit.x, 0, unit.z)); if (t > 3) { dt = 0.1f; } if (unit.vx == 0 && unit.vz == 0) { break; } } return(trails); }