protected void fixTargetPosition() { UnitNode from = m_from.Node; UnitNode to = m_to.Node; if (from == null || to == null) { return; } ProjectileNode target = _target as ProjectileNode; m_fromPos = from.position; float fFromOffsetX = 0.0f; float fFromHeight = 0.0f; if (m_fireFrom) { bool useFireOffset = (_target as ProjectileNode).Projectile.UseFireOffset; float offsetX = useFireOffset ? from.FireOffset.x : from.HalfOfWidth; float offsetY = useFireOffset ? from.FireOffset.y : from.HalfOfHeight; bool bFlipX = m_fromPos.x > m_toPos.x; fFromOffsetX = (bFlipX ? -offsetX : offsetX); fFromHeight = from.height + offsetY; } else { fFromHeight = from.height + from.HalfOfHeight; } m_fromPos.x += fFromOffsetX; m_fromPos.y += fFromHeight; m_toPos = to.position; float fToHeight = to.height + to.HalfOfHeight; m_toPos.y += fToHeight; //RendererNode rendererTarget = _target as RendererNode; //rendererTarget.height = (fFromHeight + fToHeight) / 2; //World.Main.dbgPos[0].transform.position = new Vector3(m_fromPos.x, m_fromPos.y, -200); //World.Main.dbgPos[1].transform.position = new Vector3(m_toPos.x, m_toPos.y, -200); Vector2 delta = m_toPos - m_fromPos; float fR = Utils.GetAngle(delta); float fScale = Mathf.Sqrt(delta.x * delta.x + delta.y * delta.y) / target.size.x; target.position = new Vector2((m_fromPos.x + m_toPos.x) / 2, (m_fromPos.y + m_toPos.y) / 2); //World.Main.dbgPos[2].transform.position = new Vector3(_target.gameObject.transform.position.x, _target.gameObject.transform.position.y, -200); //World.Main.dbgPos[2].transform.position = new Vector3(target.position.x, target.position.y, -200); target.rotation = fR; Vector2 scale = target.scale; scale.x = fScale; target.scale = scale; }
public override void startWithTarget(Node target) { base.startWithTarget(target); ProjectileNode r = target as ProjectileNode; Projectile p = r.Projectile; m_fireFrom = m_fromToType == Projectile.FromToType.kUnitToUnit && p.SourceUnit != null && m_from.Node == p.SourceUnit.Node; r.height = 0.0f; //target.visible = false; }
public INode GetNode(ushort nodeId) { INode pNode = null; if (nodeId == 1001) { pNode = new ProjectileNode(nodeId); } else if (nodeId == 1002) { pNode = new ExplosionNode(nodeId); } else if (nodeId == 1003) { pNode = new ActionNode(nodeId); } return(pNode); }
public SyncProjectileInfo(Projectile projectile) { ProjectileNode node = projectile.Node; baseInfo.model = projectile.Model; baseInfo.move = projectile.MoveSpeed; baseInfo.height = projectile.MaxHeightDelta; baseInfo.fire = Projectile.FireTypeToName(projectile.TypeOfFire); baseInfo.effect = (int)projectile.EffectFlags; //position = node.position; //visible = node.visible; fromTo = projectile.TypeOfFromTo; useFireOffset = projectile.UseFireOffset; srcUnit = projectile.SourceUnit != null ? projectile.SourceUnit.Id : 0; fromUnit = projectile.FromUnit != null ? projectile.FromUnit.Id : 0; toUnit = projectile.ToUnit != null ? projectile.ToUnit.Id : 0; fromPos = projectile.FromPosition; toPos = projectile.ToPosition; }
public Projectile CreateProjectile(ProjectileSyncInfo syncInfo, Skill sourceSkill = null) { localClient.ServerAddSyncAction(new SyncCreateProjectile(syncInfo)); GameObject obj = GameObjectPool.instance.Instantiate(projectilePrefab); ProjectileNode node = obj.GetComponent <ProjectileNode>(); Projectile projectile = obj.GetComponent <Projectile>(); ResourceManager.instance.LoadProjectileModel(syncInfo.baseInfo.model); // high time cost ResourceManager.instance.AssignModelToProjectileNode(syncInfo.baseInfo.model, node); projectile.MoveSpeed = (float)syncInfo.baseInfo.move; projectile.MaxHeightDelta = (float)syncInfo.baseInfo.height; projectile.TypeOfFire = Projectile.FireNameToType(syncInfo.baseInfo.fire); projectile.EffectFlags = (uint)syncInfo.baseInfo.effect; //node.position = syncInfo.position; //node.visible = syncInfo.visible; projectile.TypeOfFromTo = syncInfo.fromTo; projectile.UseFireOffset = syncInfo.useFireOffset; projectile.SourceUnit = GetUnit(syncInfo.srcUnit); projectile.FromUnit = GetUnit(syncInfo.fromUnit); projectile.ToUnit = GetUnit(syncInfo.toUnit); projectile.FromPosition = syncInfo.fromPos; projectile.ToPosition = syncInfo.toPos; if (sourceSkill != null) { projectile.SourceSkill = sourceSkill; projectile.EffectiveTypeFlags = sourceSkill.effectiveTypeFlags; } AddProjectile(projectile); node.SetFrame(ModelNode.kFrameDefault); projectile.Fire(); return(projectile); }
void Start() { Debug.Assert(unitPrefab != null); Debug.Assert(projectilePrefab != null); Debug.Assert(unitHUDPrefab != null); Debug.Assert(cameraCtrl != null); Debug.Assert(hudCanvas != null); // unit pool GameObjectPool.ResetFunction unitReset = delegate(GameObject obj) { obj.transform.localScale = new Vector3(1.0f, 1.0f, 1.0f); obj.transform.rotation = Quaternion.Euler(0, 0, 0); SpriteRenderer sr = obj.GetComponent <SpriteRenderer>(); sr.enabled = true; sr.color = new Color(1.0f, 1.0f, 1.0f, 1.0f); UnitNode node = obj.GetComponent <UnitNode>(); node.init(); node.enabled = true; Unit unit = obj.GetComponent <Unit>(); unit.enabled = true; }; GameObjectPool.DestroyFunction unitDestroy = delegate(GameObject obj) { Unit unit = obj.GetComponent <Unit>(); unit.enabled = false; unit.Cleanup(); UnitNode node = obj.GetComponent <UnitNode>(); node.enabled = false; node.cleanup(); }; GameObjectPool.instance.Alloc(unitPrefab, 50, unitReset, unitDestroy); // projectile pool GameObjectPool.ResetFunction projectileReset = delegate(GameObject obj) { obj.transform.localScale = new Vector3(1.0f, 1.0f, 1.0f); obj.transform.rotation = Quaternion.Euler(0, 0, 0); SpriteRenderer sr = obj.GetComponent <SpriteRenderer>(); sr.enabled = true; sr.color = new Color(1.0f, 1.0f, 1.0f, 1.0f); ProjectileNode node = obj.GetComponent <ProjectileNode>(); node.init(); node.enabled = true; Projectile projectile = obj.GetComponent <Projectile>(); projectile.enabled = true; }; GameObjectPool.DestroyFunction projectileDestroy = delegate(GameObject obj) { Projectile projectile = obj.GetComponent <Projectile>(); projectile.enabled = false; //projectile.Cleanup(); ProjectileNode node = obj.GetComponent <ProjectileNode>(); node.enabled = false; node.cleanup(); }; GameObjectPool.instance.Alloc(projectilePrefab, 50, projectileReset, projectileDestroy); // unit hud pool GameObjectPool.ResetFunction unitHUDReset = delegate(GameObject obj) { UnitHUD unitHUD = obj.GetComponent <UnitHUD>(); unitHUD.enabled = true; }; GameObjectPool.DestroyFunction unitHUDDestroy = delegate(GameObject obj) { UnitHUD unitHUD = obj.GetComponent <UnitHUD>(); unitHUD.enabled = false; unitHUD.m_unit.Set(null); }; GameObjectPool.instance.Alloc(unitHUDPrefab, 50, unitHUDReset, unitHUDDestroy); }
public ProjectileSystem() { NodeFilter <ProjectileNode> .Setup(ProjectileNode.GetTypes()); }
public void AssignModelToProjectileNode(string modelPath, ProjectileNode node) { var modelInfo = GetModelInfo(modelPath) as ProjectileModelInfo; AssignModelToNode(modelPath, node, modelInfo); }