坦克大战(4)C层的作用

C 层的作用是 写逻辑 添加点击事件 跟C#层的Util.CallMethod 进行交互
Util.CallMethod 调用Lua层的脚本


StartCtrl = {};
local this = StartCtrl;

local start;
local transform;
local gameObject;

--构建函数--
function StartCtrl.New()
    logWarn("StartCtrl.New--->>");
    return this;
end

function StartCtrl.Awake()
    logWarn("StartCtrl.Awake--->>");
    panelMgr:CreatePanel('Start', this.OnCreate);

end

--启动事件--
function StartCtrl.OnCreate(obj)
    gameObject = obj;
    
    start = gameObject:GetComponent('LuaBehaviour');
    start:AddClick(StartPanel.registerBtn, this.OnRegisterBtnClick);
    start:AddClick(StartPanel.loginBtn, this.OnLoginBtnClick);
    
    resMgr:LoadPrefab("Tank",{"Tank1"},this.CreateTank)
    resMgr:LoadPrefab("Tank",{"Tank2"},this.CreateEnemy)
    resMgr:LoadPrefab("Bullet",{"Bullet"},this.CreateBullet)
    
    logWarn("Start lua--->>"..gameObject.name);
end

function StartCtrl.CreateTank(gos)
    print("StartCtrl.CreateTank")
    print(gos[0].name)
    this.tank = gos[0];
end
function StartCtrl.CreateEnemy(gos)
    print("StartCtrl.CreateEnemy")
    this.enemy = gos[0];
    print(this.enemy.name)
end

function StartCtrl.CreateBullet(gos)
    this.bullet = gos[0]
    print(this.bullet.name)
end
--注册事件--
function StartCtrl.OnRegisterBtnClick(go)
    if TestProtoType == ProtocalType.BINARY then
        this.TestRegisterBinary();
    end
end
function StartCtrl.TestRegisterBinary()
local buffer = ByteBuffer.New();
buffer:WriteShort(Protocal.RegisterMsg);
    buffer:WriteByte(ProtocalType.BINARY);
buffer:WriteString(StartPanel.userNameInput:GetComponent("Text").text);
buffer:WriteString(StartPanel.userPwdInput:GetComponent("Text").text);
networkMgr:SendMessage(buffer);
end
--登录事件--
function StartCtrl.OnLoginBtnClick(go)
    sceneMgr.ChangeScene(1)
    --[[
    if TestProtoType == ProtocalType.BINARY then
        this.TestLoginBinary();
    end
    ]]
end
function StartCtrl.TestLoginBinary()
local buffer = ByteBuffer.New();
buffer:WriteShort(Protocal.LoginMsg);
    buffer:WriteByte(ProtocalType.BINARY);
buffer:WriteString(StartPanel.userNameInput:GetComponent("Text").text);
buffer:WriteString(StartPanel.userPwdInput:GetComponent("Text").text);
networkMgr:SendMessage(buffer);
end

------------------------------------------------------------------------------------------------

MainCityCtrl = {}
local this = MainCityCtrl;
local transform;
local gameObject;
local tank
local enemy
--构建函数--
function MainCityCtrl.New()
    logWarn("MainCityCtrl.New--->>");
    return this;
end
--加载面板
function MainCityCtrl.Awake()
    logWarn("StartCtrl.Awake--->>");
    panelMgr:CreatePanel('MainCity', this.OnCreate);
end
--加载面板的回调函数
function MainCityCtrl.OnCreate(obj)
    gameObject = obj;
start = gameObject:GetComponent('LuaBehaviour');
tank = newObject(StartCtrl.tank);

tank.transform:SetParent(MainCityPanel.panel.transform)
tank.transform.localPosition = Vector3.one * 0.2
tank.transform.localScale = Vector3.one * 0.1

for i=1,3 do
enemy = newObject(StartCtrl.enemy);
enemy.transform:SetParent(MainCityPanel.panel.transform)
enemyPos = Vector3.New();
enemyPos.x = math.random(-5.0, 5.0);
enemyPos.y = 0.2
enemyPos.z = math.random(-5.0, 5.0);
enemy.transform.localPosition = enemyPos
enemy.transform.localScale = Vector3.one * 0.1
end
end

--------------------------------------------------------------------------------------------------
TankCtrl = {};
local this = TankCtrl;
local transform;
local gameObject;
local horizontal;
local vertical;
local dir
this.num = 0
--构建函数--
function TankCtrl.New()
    logWarn("TankCtrl.New--->>");
    return this;
end

function TankCtrl.Awake(go)
    logWarn("TankCtrl.Awake--->>");
    gameObject = go
    transform = go.transform
    this.CC = gameObject:GetComponent('CharacterController');
    firePos = transform:Find("FirePos").gameObject
end

function TankCtrl.Update(go)
    horizontal = Input.GetAxis("Horizontal");
    vertical = Input.GetAxis("Vertical");
    if horizontal~=0 or vertical~=0 then
        print(horizontal)
        print(vertical)
        dir = Vector3.New()
        dir.x = horizontal
        dir.y = 0;
        dir.z = vertical
        this.CC:SimpleMove(dir * 10)
        this.pos = transform.localPosition;
        this.pos.x = Mathf.Clamp(this.pos.x,-5.0,5.0)
        this.pos.z = Mathf.Clamp(this.pos.z,-5.0,5.0)
        transform.localPosition = this.pos
    end

    if Input.GetMouseButtonDown(0) then
        this.bullet = newObject(StartCtrl.bullet)
        local o= BulletCtrl:New(nil,this.bullet)

        BulletCtrl.bulletTable[this.bullet] = o
        
        for k,v in pairs(BulletCtrl.bulletTable) do
            this.num = this.num + 1
        end

        print("----------------------------长度"..this.num)

        this.bullet.transform:SetParent(firePos.transform)
        
this.bullet.transform.localPosition = Vector3.zero
this.bullet.transform.localScale = Vector3.one
this.bullet.transform.eulerAngles = firePos.transform.eulerAngles
        this.bullet.transform.parent = nil
    end

    if this.num >0 then
        for k,v in pairs(BulletCtrl.bulletTable) do
            if(v ~= nil)then
                v:Update()
            end
        end
    end
end

--------------------------------------------------------------------------------------------

BulletCtrl = {};
local this = BulletCtrl;
local transform;
local gameObject;
BulletCtrl.bulletTable = {}
BulletCtrl.num = 0
--构建函数--
function BulletCtrl:New(o,go)
    o = o or {}
    setmetatable(o,self)
    self.__index = self
    o.gameObject = go.gameObject
    o.transform = o.gameObject.transform
    return o
end

function BulletCtrl:Update()
    if self ~= nil then
        self.transform:Translate(-self.transform.forward * 10 * Time.deltaTime)
    end
end

function BulletCtrl.OnTriggerEnter(...)
    local table = {...}

    if table[2].name ~= "Tank1(Clone)" then
        print("碰撞")
        BulletCtrl.num = BulletCtrl.num + 1
        BulletCtrl.bulletTable[table[1]] = nil
        this.OnDestroy(table[1])
        this.OnDestroy(table[2])

    end

end 

function BulletCtrl.OnDestroy(obj)
    destroy(obj)
end


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值