public static InstanceData GetData(SimMovement simmove, SimObjectInstance instance) { if (instance.MovementData == null) { instance.MovementData = new InstanceData(instance.Sim, simmove); } return((InstanceData)instance.MovementData); }
private void Step(IList <SimObjectInstance> objs) { for (int i = objs.Count - 1; i >= 0; i--) { SimObjectInstance inst = objs[i]; inst.Step(LOCKSTEP); if (inst.DeleteMe) { objs.RemoveAt(i); } } }
protected override void ObjectCollision(SimObjectInstance obj) { SimUnitInstance inst = obj as SimUnitInstance; if (inst != null && (inst.UnitConfig.Team == ProjectileConfig.CollidesWithTeam || ProjectileConfig.CollidesWithTeam == SimUnitConfig.ETeam.Both)) { inst.DoDamage(ProjectileConfig.Damage, 0.0f); if (OnCollision != null) { OnCollision(this, new OnCollisionEventArgs(inst)); } Destroy(); } }
private void EvaluateCollision() { if (ObjectConfig.EnableCollisionCheck) { IOctreeObject[] objs = Sim.Octtree.GetColliding(ObjectBounds); foreach (IOctreeObject obj in objs) { if (obj != this) { SimObjectInstance inst = (SimObjectInstance)obj; if (inst != null) { ObjectCollision(inst); } } } } }
public Vector3 Integrate(SimObjectInstance instance, float deltatime) { InstanceData data = InstanceData.GetData(this, instance); if (data.Speed == 0.0f) { return(Vector3.zero); } Vector3 delta = instance.Sim.Goal.normal * (deltatime * data.Speed) * -1.0f; if (WobbleFrequency != Vector3.zero && WobbleAmplitute != Vector3.zero) { data.WobbleOffset.x = Mathf.Sin(data.WobbleRandom.x * (WobbleFrequency.x * instance.Sim.SimTime)) * WobbleAmplitute.x; data.WobbleOffset.y = Mathf.Sin(data.WobbleRandom.y * (WobbleFrequency.x * instance.Sim.SimTime)) * WobbleAmplitute.y; data.WobbleOffset.z = Mathf.Sin(data.WobbleRandom.z * (WobbleFrequency.x * instance.Sim.SimTime)) * WobbleAmplitute.z; delta = delta + data.WobbleOffset; } return(delta); }
protected override void ObjectCollision(SimObjectInstance obj) { throw new NotImplementedException(); }
protected abstract void ObjectCollision(SimObjectInstance obj);