public override void OnEnter(GameObject obj) { base.OnEnter(obj); master = obj.GetComponent <UnitCard>().unit; switch (obj.GetComponent <UnitCard>().type) { case UnitType.creature: CircleMapUnit c = mapField.Get(MapType.Circle) as CircleMapUnit; c.maptype = MapType.Circle; c.unittype = UnitType.creature; c.positon = new Vector2(data.position.x, data.position.z); c.id = obj.GetComponent <UnitCard>().unit.Id; c.speed = new Vector2(data.forward.x * data.speed, data.forward.z * data.speed); c.radius = data.bodySize.x; c.unit = master; mapField.AddUnit(c); break; } }
public bool CheckIsMoved(CircleMapUnit unit) { Vector2 start = unit.positon; Vector2 end = unit.positon + unit.speed; // check static gird if (!IsGridMoved(end, unit.radius)) { return(false); } foreach (var u in creatureUnits) { if (IsCollided(unit, u.Value)) { return(false); } } return(true); }
private bool IsCollided(MapUnit source, MapUnit target) { switch (source.maptype) { case MapType.Circle: CircleMapUnit s = source as CircleMapUnit; if (target.maptype == MapType.Circle) { CircleMapUnit t = target as CircleMapUnit; if (Vector2.Distance(source.positon + source.speed, target.positon + target.speed) > s.radius + t.radius) { return(false); } else { return(true); } } break; } return(false); }